package javaClassExercise;

/**
 * Created by lomo on 2017.
 */
public class abstractStudy extends A {

    //over ride 重写父类的抽象方法
    @Override
    int a () {
//        System.out.println("override A's 方法a ");
        return 1;
    }

}


abstract class A {
    //抽象方法
    abstract int a ();

    //具体方法
    public void b () {
        System.out.println("void b() ");
    }
}

class C {
    //javac后.class文件里会发现一个空的C构造函数.编译时自动创建的
    public static void main(String[] args) {
        abstractStudy abs = new abstractStudy();
        System.out.println(abs.a());  //输出：1

//        A aa = new A();  //抽象类不能被new

        //使用匿名类的形式实现new一个抽象类，其实质也是相当于继承了抽象类并重写抽象方法
        A aa = new A() {
            int a() {
                return 2;
            }
        };
        System.out.println(aa.a());  //输出：2

        //在类C中再次使用匿名类，重写类A抽象方法，相当于在类C内部实现了2此继承，从而实现了Java的多重继承
        A aaa = new A() {
            int a() {
                return 3;
            }
        };
        System.out.println(aaa.a());   //输出：3
    }
}